package com.mohe.shanpao.service;

import java.util.List;

/**
 * 服务公用类接口
 *
 */
public interface GenericService<T>
{
    
    /**
     * 
     * 查询对象
     * 更加条件查询对象
     * @param t 对象
     * @return 对象
     * @see [类、类#方法、类#成员]
     */
    T selectBean(T t);
    
    /**
     * 按照条件查询结果
     * 按照查询条件查询出List的结果集
     * @param obj 查询条件
     * @return List列表
     * @see [类、类#方法、类#成员]
     */
    List<T> selectByExample(Object obj);
    
    /**
     * 查询全部结果
     * @return 结果列表
     */
    List<T> selectAll();
    
    /**
     * 总条数
     * 总条数
     * @param t 查询条件
     * @return 总条数
     * @see [类、类#方法、类#成员]
     */
    int selectCount(T t);
    
    /**
     * 保存一个实体，null的属性也会保存，不会使用数据库默认值
     * @param record
     * @return 插入数据条数
     */
    int insert(T record);
    
    /**
     * 保存一个实体，null的属性不会保存，会使用数据库默认值
     * @param record
     * @return 插入数据条数
     */
    int insertSelective(T record);
    
    /**
     * 根据实体属性作为条件进行删除，查询条件使用等号
     * @param record
     * @return 删除条数
     */
    int delete(T record);
    
    /**
     * 根据主键字段进行删除，方法参数必须包含完整的主键属性
     * @param id
     * @return 删除条数
     */
    int deleteByPrimaryKey(Long id);
    
    /**
     * 根据主键更新实体全部字段，null值会被更新
     * @param record
     * @return 更新条数
     */
    int updateByPrimaryKey(T record);
    
    /**
     * 根据主键更新属性不为null的值
     * @param record
     * @return 更新条数
     */
    int updateByPrimaryKeySelective(T record);
    
    /**
     * 根据主键查询
     * @param record
     * @return 查询对象
     */
    T selectByPrimaryKey(T record);
    
    /**
     * 根据条件更新
     * @param t
     * @param example
     * @return 更新条数
     */
    int updateByExampleSelective(T t, Object example);
    
}
